import { Injectable } from '@nestjs/common';
import { Request } from 'express';
import { UAParser } from 'ua-parser-js';

@Injectable()
export class ClientInfoService {
  /**
   * 获取客户端IP地址
   */
  getClientIp(req: Request): string {
    const ip = req.headers['x-forwarded-for'] ||
      req.connection.remoteAddress ||
      req.socket.remoteAddress;

    // 如果是IPv6地址格式的本地地址，处理一下
    if (typeof ip === 'string' && ip.includes('::ffff:')) {
      return ip.replace('::ffff:', '');
    }

    return ip as string || '127.0.0.1';
  }

  /**
   * 获取客户端浏览器信息
   */
  getBrowserInfo(req: Request): { browser: string; os: string } {
    const userAgent = req.headers['user-agent'] || '';
    const parser = new UAParser(userAgent);

    const browser = parser.getBrowser();
    const os = parser.getOS();

    return {
      browser: `${browser.name || ''} ${browser.version || ''}`.trim(),
      os: `${os.name || ''} ${os.version || ''}`.trim()
    };
  }

  /**
   * 根据IP获取地理位置信息（这里简化处理，实际项目可能需要调用IP查询API）
   */
  getLocationByIp(ip: string): string {
    // 在实际应用中，这里可以调用第三方API查询IP归属地
    // 例如使用 ip2region 或调用公共API
    // 简化处理，返回一个默认值
    if (ip === '127.0.0.1' || ip === 'localhost' || ip.startsWith('192.168.')) {
      return '内网IP';
    }
    return '未知位置';
  }
} 